Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.12.2019, 00:27
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

БД ajax-чат не выводит сообщения
Приветствую. В базу данных все добавляется. Дамп, думаю, смысла нет прикладывать, там поля id,name,text,date. Я еще таймер повторного ajax-запроса должен был поставить, по идее, но точно не знаю, как он ставится))

<?php

//подключение к БД
function db_join(){
    static $db;
    if($db===null){
        $db = new PDO("mysql:host=localhost;dbname=ajax_jax","root","");
        $db->exec("SET USE UTF-8");
    }
    return $db;
}

//Вставка в БД
function db_query($name,$text){
    $bd = db_join();
    $sql = "INSERT INTO ajax(name,text) VALUES('$name','$text')";
    $query=$bd->prepare($sql);
    $query->execute();
    $info = $query->errorInfo();
    echo $info[2];
    return $query->fetchAll();
}


if(count($_POST) > 0){
    if(!empty($_POST["name"]) || !empty($_POST["text"])) {
        $name = $_POST["name"];
        $text = $_POST["text"];
        $db = db_query($name,$text);
    }
}


//Вывод из БД
function db_read(){
    $bd = db_join();
    $sql = "SELECT * from `ajax` ORDER BY `date` DESC";
    $query=$bd->prepare($sql);
    $query->execute();
    $info = $query->errorInfo();
    echo $info[2];
    return $query->fetchAll();
}

$messages = db_read();

?>


Джаваскрипт-файл (в нем косяк, думаю)
function funcSuccess(data){
    $(".message").html(data)
}

$(function(){
    $("form").submit(function(event){
        $.ajax({
            url:"content.php",
            type: "POST",
            data:{name: $(".name").val(),text: $(".text").val()},
            dataType:"html",
            success: funcSuccess
        })
    })
})


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Чат</title>
    <style>
        .message{
            border:1px solid #ccc;
            padding:10px;
            margin-bottom:20px;
        }

    </style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<form method="post" id="ajaxForm">
    <p>
        <label for="name" style="margin-right:8px">Имя</label>
        <br>
        <input type="text" name="name" class="name">
    </p>
    <p>
        <label for="text">Текст</label>
        <br>
        <textarea name="text" cols="21" rows="5" class="text"></textarea>
        <br>
    </p>
    <input type="submit" class="click">
</form>
<hr>
<?php if(!empty ($messages) ){ ?>
    <?php foreach($messages as $message){ ?>
        <div class="message">
            <p>Автор: <?= $message["name"]?>| Дата: <?= $message["date"]?></p>
            <div>Сообщение: <?= nl2br($message["text"])?></div>
        </div>
    <?php } ?>
<?php } ?>
<script src="script2.js"></script>
</body>
</html>

Последний раз редактировалось Иса Мирзоев, 15.12.2019 в 00:31.
Ответить с цитированием
  #2 (permalink)  
Старый 15.12.2019, 00:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Иса Мирзоев
$sql = "INSERT INTO ajax(name,text) VALUES('$name','$text')";
    $query=$bd->prepare($sql);
Так нельзя, да еще в PDO, читайте об именованных метках.

Сообщение от Иса Мирзоев
if(count($_POST) > 0){
Зачем? Не пустой массив возвращает true, то есть if($_POST) { ....

А нет выборки потому, что с клиента такого запроса нет.
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2019, 00:52
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Сообщение от laimas Посмотреть сообщение
Так нельзя, да еще в PDO, читайте об именованных метках.



Зачем? Не пустой массив возвращает true, то есть if($_POST) { ....

А нет выборки потому, что с клиента такого запроса нет.
Окей, что мне надо добавить? Как примерно сформировать запрос недостающий джаваскриптовый?
Ответить с цитированием
  #4 (permalink)  
Старый 15.12.2019, 01:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Иса Мирзоев
Окей, что мне надо добавить?
Запрос, который бы сервер мог трактовать, что это запрос на выборку из базы, либо всего, либо записей по условию, либо конкретной записи и т.п.
Ответить с цитированием
  #5 (permalink)  
Старый 15.12.2019, 01:23
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Сообщение от laimas Посмотреть сообщение
Запрос, который бы сервер мог трактовать, что это запрос на выборку из базы, либо всего, либо записей по условию, либо конкретной записи и т.п.
А в первом файле с 34 по 43 строку разве это не происходит?
Ответить с цитированием
  #6 (permalink)  
Старый 15.12.2019, 02:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Да, в 45 есть вызов функции, не заметил. Но что у вас возвращает функция? Правильно, кашу: сначала делает вывод в браузер echo $info[2], а затем массив return $query->fetchAll() в никуда, так как с переменной $messages, которая получает этот массив ничего ровным счетом не происходит. Вы уж определитесь чего хотите получать, и коли массив, то это только JSON, а значит echo $info[2] удалить, и на клиенте ну никак не $(".message").html(data).
Ответить с цитированием
  #7 (permalink)  
Старый 15.12.2019, 02:18
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Сообщение от laimas Посмотреть сообщение
Да, в 45 есть вызов функции, не заметил. Но что у вас возвращает функция? Правильно, кашу: сначала делает вывод в браузер echo $info[2], а затем массив return $query->fetchAll() в никуда, так как с переменной $messages, которая получает этот массив ничего ровным счетом не происходит. Вы уж определитесь чего хотите получать, и коли массив, то это только JSON, а значит echo $info[2] удалить, и на клиенте ну никак не $(".message").html(data).
В этом-то вопрос, что тогда, если не $(".message").html(data)?) На json все поменяем))
п.с. а предположим, не массив у нас, а просто строка text из БД, ее-то как вывести?)

Последний раз редактировалось Иса Мирзоев, 15.12.2019 в 02:25.
Ответить с цитированием
  #8 (permalink)  
Старый 15.12.2019, 02:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Иса Мирзоев
В этом-то вопрос, что тогда, если не $(".message").html(data)?
Чтобы это понять, нужно забыть на время что вообще существует Ajax и JS, ибо куда проще отправлять запросы обычной формой, а результат выводить на страницу, в данном случае это так:

echo '<pre>' . print_r(db_read(), 1) . '</pre>';


Что вы собираетесь выводить как html в этом случае?

А вот когда уясните что к чему, тогда и придет понимание как отдать клиенту и что сделать на клиенте, вот тогда и наступит очередь Ajax.
Ответить с цитированием
  #9 (permalink)  
Старый 15.12.2019, 02:52
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Сообщение от laimas Посмотреть сообщение
Чтобы это понять, нужно забыть на время что вообще существует Ajax и JS, ибо куда проще отправлять запросы обычной формой, а результат выводить на страницу, в данном случае это так:

echo '<pre>' . print_r(db_read(), 1) . '</pre>';


Что вы собираетесь выводить как html в этом случае?

А вот когда уясните что к чему, тогда и придет понимание как отдать клиенту и что сделать на клиенте, вот тогда и наступит очередь Ajax.
Вы говорили, что в json-е надо выводить массивы. Значит, надо сначала в php через json-encode обработать, а потом парсить в джаваскрипте, а дальше выводить. Только без понятия, что на выходе получится))
Ответить с цитированием
  #10 (permalink)  
Старый 15.12.2019, 04:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Иса Мирзоев
Только без понятия, что на выходе получится
Еще раз - выбросить из головы JS, ajax и прочее, пока не уясните что возвращает ваша функция после выборки из базы. Для этого достаточно print_r(), var_dump(), а плюшки на клиенте типа ajax, это всего лишь способ обмена данными, а не нечто основополагающее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax чат - проблема useruser AJAX и COMET 15 24.05.2014 21:58
Не правильно выводит Ajax в Div АртурГарик AJAX и COMET 3 26.09.2013 17:05
Резиновые дивы с прокруткой Java Script Mary-Jay Элементы интерфейса 10 24.07.2013 17:51
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Гостевая Ajax + php не обнавляется при добавлении сообщения onuvidelsolnce AJAX и COMET 6 27.11.2011 21:47